package test;

import java.io.*;

/**
 *: 常用图片的格式可以通过读取文件头部分获得：常用图片的格式可以通过读取文件头部分获得(16进制)：
 （1）JPEG，JPG
 - 文件头标识 (2 bytes): 0xff, 0xd8 (SOI) (JPEG 文件标识)

 （3）PNG
 - 文件头标识 (8 bytes)   89 50 4E 47 0D 0A 1A 0A
 （4）GIF
 - 文件头标识 (6 bytes)   47 49 46 38 39(37) 61
 （5）BMP
 - 文件头标识 (2 bytes)   42 4D，字符即：        B  M
 输入一个文件名，判断其真正格式和其文件类型是否匹配（防止直接给文件改名，比如把一个jpg改成bmp或者把一个rar改成jpg）
 */
public class TupianYanzheng {
    public static void main(String[] args) throws Exception {
        //后缀和他真实的匹配是否匹配
        File f=new File("D:\\Documents\\桌面\\3.png");
        String name=f.getName();
        FileInputStream fin=new FileInputStream(f);
        int ir[]=new int[8];
        //byte ir2[]=new byte[8];
        for (int i = 0; i < ir.length; i++) {
            ir[i]=fin.read();
        }
        //String str=16进制的字符串
        //>Integer.toHexString()
        int []png={0X89 ,0X50 ,0X4E ,0X47 ,0X0D ,0X0A ,0X1A ,0X0A};

        //后缀
        String houzhui=name.substring(1+name.lastIndexOf('.')).toUpperCase();
        switch (houzhui){
            case "JPEG":
            case "JPG":
                if(ir[0]==0xFF&&ir[1]==0xd8){
                    System.out.println("合法的jpg文件");
                }else{
                    System.out.println("不合法的jpg文件");
                }
                break;
            case "PNG":
                for (int i = 0; i < png.length; i++) {
                    if(ir[i]!=png[i]){
                        System.out.println("不合法的png文件");
                        return;
                    }
                }
                System.out.println("合法的png文件");
                break;
            case "BMP":
                if(ir[0]==0x42&&ir[1]==0x4d){
                    System.out.println("合法的bmp文件");
                }else{
                    System.out.println("不合法的bmp文件");
                }
                break;
        }
    }
}
